package top.zackyoung.springboot.config

import com.alibaba.fastjson.serializer.SerializerFeature
import com.alibaba.fastjson.support.config.FastJsonConfig
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter
import org.springframework.boot.autoconfigure.http.HttpMessageConverters
import org.springframework.context.annotation.{Bean, Configuration}
import org.springframework.http.MediaType
import org.springframework.http.converter.HttpMessageConverter

import java.util

//@Configuration
class ScalaFastjsonConfig {
  @Bean def fastJsonHttpMessageConverters: HttpMessageConverters = { // 1.定义一个converters转换消息的对象
    val fastConverter: FastJsonHttpMessageConverter = new FastJsonHttpMessageConverter
    // 2.添加fastjson的配置信息，比如: 是否需要格式化返回的json数据
    val fastJsonConfig: FastJsonConfig = new FastJsonConfig
    fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat, SerializerFeature.WriteMapNullValue, SerializerFeature.DisableCircularReferenceDetect)
    // 中文乱码解决方案
    val mediaTypes: util.ArrayList[MediaType] =new util.ArrayList[MediaType]()
    // 设定json格式且编码为UTF-8
    mediaTypes.add(MediaType.APPLICATION_JSON_UTF8)
    fastConverter.setSupportedMediaTypes(mediaTypes)
    // 3.在converter中添加配置信息
    fastConverter.setFastJsonConfig(fastJsonConfig)
    // 4.将converter赋值给HttpMessageConverter
    // 5.返回HttpMessageConverters对象
    //BigDecimal格式化
    //设置我们自定义的 BigDecimalValueFilter
    fastJsonConfig.setSerializeFilters(new BigDecimalValueFilter)
    return new HttpMessageConverters(fastConverter.asInstanceOf[HttpMessageConverter[_]])
  }
}
